#include <semaphore.h>
#include <assert.h>
class sem {
    public:
        sem(int value = 0) {
            init(value);
        }   

        void init(int value) {
            assert(!sem_init(&sem_ , 0, value));
        }
        virtual ~sem() {
            sem_destroy(&sem_);
        }

        int post() {
            return sem_post(&sem_);
        }

        int wait() {
            return sem_wait(&sem_);
        }

    private:

        sem_t sem_;

};